package com.cqjybigscreen.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.cqjybigscreen.pojo.dto.*;
import com.cqjybigscreen.pojo.entity.AdsCqwlChannel;
import com.cqjybigscreen.pojo.vo.BoxVolumeVO;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.time.LocalDate;
import java.util.List;

/**
 * <p>
 * 四向通道汇总 Mapper 接口
 * </p>
 *
 * @author RaoChang
 */
@Mapper
public interface AdsCqwlChannelMapper extends BaseMapper<AdsCqwlChannel> {
    /**
     * 获取最近30天的货量
     *
     * @param lastMonthStartTime 前30天开始时间
     * @return List<AdsCqwlChannelTrain>
     */
    List<LastMonthSalesVolumeDTO> getLastMonthSalesVolume(@Param("startDate") String lastMonthStartTime,
                                                          @Param("type") Boolean type,
                                                          @Param("direction") List<String> direction);

    /**
     * 获取本年货量
     *
     * @param startYear 开始时间
     * @param endYear   结束时间
     * @return List<AdsCqwlChannelTrain>
     */
    List<BoxTrendDto> getBoxTrend(@Param("startYear") LocalDate startYear,
                                  @Param("endYear") LocalDate endYear);

    /**
     * 获取精品路线列表
     *
     * @param dto 方位参数
     * @return List<BoxVolumeVO>
     */
    List<BoxVolumeVO> getPremiumRouteList(@Param("dto") BoxTrendDto dto);

    /**
     * 获取运输方式
     *
     * @return List<BoxVolumeVO>
     */
    List<BoxVolumeVO> getTransportationMode();

    /**
     * 获取本年货运量.进口.出口.重箱.空箱
     *
     * @param dto 方位参数
     * @return StatisticsDto
     */
    StatisticsDto getYearStatistics(@Param("dto") BoxTrendDto dto);

    /**
     * 获取今日货运箱量
     *
     * @param dto 方位参数
     * @return String
     */
    String getTodayStatistics(@Param("dto") BoxTrendDto dto);

    /**
     * 获取今年班列数和各个渠道的班列量
     *
     * @param dto 方位参数
     * @return StatisticsDto
     */
    StatisticsDto getTrainNum(@Param("dto") BoxTrendDto dto);

    /**
     * 根据终点站获取精品路线详情
     *
     * @param destinationStation 终点站
     * @return List<BoxVolumeVO>
     */
    List<BoxVolumeVO> premiumRouteDetails(String destinationStation);

    /**
     * 物流大屏2左1箱量走势
     * @param destinationStation 目的地
     * @param  type:1:近30天 2:最近3个月 3:最近1年
     * @param  lastMonthStartTime: 因为是最近时间 只需要获取开始时间即可
     * @return List<DataWithRouteDTO> 暂存List,后面需要处理数据返回给前端
     */
    List<BoxVolumeVO> boxPlotDataWithRoute(@Param("startDate") String lastMonthStartTime,
                                           @Param("type") Boolean type,
                                           @Param("destinationStation") String destinationStation);

    /**
     * 查询近半年数据
     * @param dto dto里面的destinationStation表示目的地
     * @param lastHalfYearStartTime 近半年的开始时间
     * @return List<BoxVolumeVO>
     */
    List<BoxVolumeVO> getBoxTrendWithRouteLastHalfYear(@Param("dto") RouteDTO dto,
                                                       @Param("startDate") String lastHalfYearStartTime);

    /**
     * 查询近半年同比数据
     * @param dto dto里面的destinationStation表示目的地
     * @param startTime  开始时间
     * @param endTime  结束时间
     * @return  List<BoxVolumeVO>
     */
    List<BoxVolumeVO> getBoxTrendWithRouteLastHalfYearTongbi(@Param("dto") RouteDTO dto,
                                                             @Param("startDate") LocalDate startTime,
                                                             @Param("endDate") LocalDate endTime);

    /**
     * 点击中转站返回线路汇总
     * @param portStation 中转站
     * @return List<BoxVolumeVO>
     */
    List<BoxVolumeVO> getMapList(String portStation);

    /**
     * 获取货物排行榜
     * @Param destination 目的地
     * @return List<BoxVolumeVO>
     */
    List<BoxVolumeVO> getGoodsRanking(String destination);

    /**
     * 获取今年箱量
     */
    List<LastMonthSalesVolumeDTO> getThisYearTotal();

    /**
     * 获取之前数据
     */
    List<BoxVolumeVO> premiumRouteDetailsLast(@Param("destinationStation") String destinationStation,
                                              @Param("startDate")LocalDate startDate,
                                              @Param("endDate")LocalDate endDate);
}
